#-*- codeing = utf-8 -*-
#@Time : 2020/9/13 12:22
#@Author : 阳某
#@File : 协程.py
#@Software : PyCharm
import asyncio
# def reques(url):
#     print('正在请求的url是：',url)
#     print('请求成功：',url)
# reques('www.baidu.com')

# 使用async关键字定义一个协程
async def reques(url):
    print('正在请求的url是：',url)
    print('请求成功：',url)
    return url  #回调函数的返回值
# 被async修饰的函数,调用之后返回一个协程对象
c = reques('www.baidu.com')

# # 创建一个事件循环对象loop
# loop = asyncio.get_event_loop()
# # 将协程对象注册到loop中，然后启动loop
# loop.run_until_complete(c)

# # task的使用创建一个事件循环对象loop
# loop = asyncio.get_event_loop()
# task = loop.create_task(c)
# print('没有执行前的协程状态',task)
# loop.run_until_complete(task)
# print('执行后的协程状态',task)

# # future的使用
# loop = asyncio.get_event_loop()
# task = asyncio.ensure_future(c)
# print(task)
# loop.run_until_complete(task)
# print(task)

# 回调函数
def callback_func(task):
    # result返回的就是任务对象中封装的协程对象对应的函数的返回值
    print(task.result())
# 绑定回调
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(c)
# 将回调函数绑定到任务对象中
task.add_done_callback(callback_func)   #这里是默认将task自己作为参数传入到回调函数中
loop.run_until_complete(task)
